package com.test.booksystem.model;

import java.util.HashMap;
import java.util.Map;

public enum BookStatus {
    INVALID(0,"无效图书"),
    PERMIT(1,"可借阅"),
    FORBID(2,"不可借阅"),
    ;

    BookStatus(Integer code, String status) {
        this.code = code;
        this.statusCN = status;
    }

    // 创建一个方法: 根据 code 返回 status 信息，有3种实现方式
    // 1. 返回 status 信息
    // 2. 返回 枚举项 enum
    // 3. 构造一个 static 代码块，将 code 与 status 存入 Map 中，根据Map的key返回value
    // 其实这三种思路是一样的，实现方式不同而已
    // 这里使用第二种实现方式
    public static BookStatus getStatusByCode(Integer code) {
        switch (code) {
            case 0:
                return INVALID;
            case 1:
                return PERMIT;
            case 2:
            default:
                return FORBID;
        }
    }

    // 第一种实现方式
    public static String getStatusByCode1(Integer code) {
        switch (code) {
            case 0:
                return INVALID.getStatusCN();
            case 1:
                return PERMIT.getStatusCN();
            case 2:
            default:
                return FORBID.getStatusCN();
        }
    }

    // 第三种
    private static Map<BookStatus,String> map = new HashMap<>();

    static {
        map.put(INVALID, INVALID.statusCN);
        map.put(PERMIT,PERMIT.statusCN);
        map.put(FORBID,FORBID.statusCN);
    }

    public static String getStatusByCode3(Integer code) {
        switch (code) {
            case 0:
                return map.get(INVALID);
            case 1:
                return map.get(PERMIT);
            case 2:
            default:
                return map.get(FORBID);
        }
    }

    private Integer code;
    private String statusCN;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getStatusCN() {
        return statusCN;
    }

    public void setStatusCN(String statusCN) {
        this.statusCN = statusCN;
    }
}
